#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#include <stdlib.h>


int tab[2];
int in1;
int in2;
int tour;


void transfert1(void) {

	int somme=1000;

	in1=1;
	tour=2;

	while(in2 && (tour == 2));

	if(tab[0]<=0)
		pthread_exit(NULL);

	if(tab[0]>1000)
		somme=((rand()%(1000))+1);
	if(tab[0]<=1000)
		somme=((rand()%tab[0])+1);


	tab[0]-=somme;
	tab[1]+=somme;

	//printf("Le compte A est créditeur de : %d\nLe compte B est créditeur de : %d\n",tab[0],tab[1]);

	in1=0;

	pthread_exit(NULL);

}


void transfert2(void) {

	int somme=1000;

	in2=1;
	tour=1;

	while(in1 && (tour == 1));

	if(tab[0]<=0)
		pthread_exit(NULL);

	if(tab[0]>1000)
		somme=((rand()%(1000))+1);
	if(tab[0]<=1000)
		somme=((rand()%tab[0])+1);


	tab[0]-=somme;
	tab[1]+=somme;

	//printf("Le compte A est créditeur de : %d\nLe compte B est créditeur de : %d\n",tab[0],tab[1]);

	in2=0;

	pthread_exit(NULL);

}



int main ( int argc , char** argv ) {

	srand(time(NULL));

	pthread_t id[2];

	unsigned int i;

	for(i=0;i<2;i++) {

		tab[0]=30000;
		tab[1]=0;

		while(tab[0]>0) {

			if( pthread_create(&id[0],NULL,(void*)transfert1,NULL) != 0 ) {
				fprintf(stderr,"Erreur Thread Compte 1 : ");
				exit(1);
			}

			if( pthread_create(&id[1],NULL,(void*)transfert2,NULL) != 0 ) {
				fprintf(stderr,"Erreur Thread Compte 2 : ");
				exit(2);
			}

			pthread_join(id[0],NULL);
			pthread_join(id[1],NULL);

		}

		if(tab[0]!=0) {
			printf("Le compte A est créditeur de : %d\nLe compte B est créditeur de : %d\n",tab[0],tab[1]);
		}

	}



	return 0;

}
